package com.example.entity;

import lombok.*;
import org.hibernate.annotations.Comment;

import javax.persistence.*;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.List;

@Getter
@Setter
@RequiredArgsConstructor
@Entity
@Table(name = "company",
//uniqueConstraints：定义唯一约束，确保company_name字段在表中唯一，约束名为uk_company_name。
uniqueConstraints = {@UniqueConstraint(columnNames = "company_name")},
//indexes：为表创建索引，索引名为idx_company_name，索引包含company_name列。
indexes = @Index(name = "idx_company_name", columnList = "company_name")
)
public class Company implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 公司 ID，主键，唯一标识一个公司。
     */
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "company_id")
    @Comment("公司 ID，主键")
    private Long id;

    /**
     * 公司名称，唯一，不能为空。
     */
    @Column(name = "company_name",length = 100, nullable = false)
    @Comment("公司名称，唯一")
    private String name;

    /**
     * 公司成立日期，不能为空。
     */
    @Column(name = "establishment_date", nullable = false)
    @Comment("公司成立日期")
    private LocalDate establishmentDate;

    /**
     * 公司注册资本，不能为空，总共20位，小数占2位。
     */
    @Column(name = "registered_capital",precision = 20, scale = 2, nullable = false)
    private BigDecimal registeredCapital;

    /**
     * 公司是否运营，不能为空。
     */
    @Column(name = "is_operating", nullable = false)
    @Comment("公司是否运营")
    private Boolean operating;


    /**
     * mappedBy = "company"
     * 关系由 Employee 的 company 维护
     * cascade = CascadeType.ALL
     * 级联所有操作，自动处理关联员工
     */
    @OneToMany(mappedBy = "company", cascade = CascadeType.ALL,fetch = FetchType.LAZY)
    private List<Employee> employees;




}